package com.sourcetrip.linkedlist.lt;


import com.sourcetrip.raw.model.ListNode;

/**
 * @author: ZhouBert
 * @date: 2020/11/18
 * @description: https://leetcode-cn.com/problems/reverse-linked-list/
 * 反转一个单链表。
 * <p>
 * 示例:
 * <p>
 * 输入: 1->2->3->4->5->NULL
 * 输出: 5->4->3->2->1->NULL
 * 进阶:
 * 你可以迭代或递归地反转链表。你能否用两种方法解决这道题？
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/reverse-linked-list
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class ReverseLinkedList {


	/**
	 * 使用迭代来解决了
	 * 有三个指针进行前进（模拟了两个指针的情况，并不能解决问题，算法还是需要多比划比划）
	 * @param head
	 * @return
	 */
	public ListNode reverseList1(ListNode head) {
		//!注意边界判断
		if (head==null) {
			return head;
		}

		ListNode point = head;
		ListNode next = head.next;
		ListNode old = null;
		while (next != null) {
			point.next = old;
			old = point;
			point = next;
			next = next.next;
		}
		point.next = old;
		return point;
	}

	/**
	 * 使用递归进行反转
	 * @param head
	 * @return
	 */
	public ListNode reverseList2(ListNode head) {
		//!注意边界判断
		return null;
	}


}
